/**
 * API 错误处理工具
 */

import type { ResponseType } from './global.type';

/**
 * 常用错误码枚举
 */
export enum ErrorCode {
	SUCCESS = 0,
	UNAUTHORIZED = 401,
	FORBIDDEN = 403,
	NOT_FOUND = 404,
	SERVER_ERROR = 500
}

/**
 * 判断是否为 API 响应错误
 */
export const isApiResponseError = <T = unknown>(error: unknown): error is ResponseType<T> => {
	return (
		typeof error === 'object' &&
		error !== null &&
		('code' in error || 'status' in error) &&
		'message' in error
	);
};

/**
 * 错误码对应的中文提示映射
 */
const ERROR_CODE_MESSAGE_MAP: Record<number, string> = {
	[ErrorCode.UNAUTHORIZED]: '登录已过期,请重新登录',
	[ErrorCode.FORBIDDEN]: '权限不足,无法访问该资源',
	[ErrorCode.NOT_FOUND]: '请求的资源不存在',
	[ErrorCode.SERVER_ERROR]: '服务器内部错误,请稍后重试'
};

/**
 * 获取错误消息（兼容多种错误类型）
 */
export const getErrorMessage = (error: unknown): string => {
	if (isApiResponseError(error)) {
		// 优先使用错误码映射表中的中文提示
		const code = error.status;
		if (code !== undefined && code in ERROR_CODE_MESSAGE_MAP) {
			return ERROR_CODE_MESSAGE_MAP[code];
		}
		// 其他错误码返回接口的错误信息
		return error.message || '请求失败';
	}
	if (error instanceof Error) {
		return error.message;
	}
	if (typeof error === 'string') {
		return error;
	}
	return '未知错误';
};
